﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Protocolo
{
    public abstract class Paquete
    {
        public byte[] ByteArray;

        public string GetHeader() 
        {
            byte[] Header = (byte[])ByteArray.Take(3).ToArray();
            string Retorno = Header.ToString();

            return Retorno;
        }

        public string GetCmd() 
        {
            byte[] CMD = (byte[])ByteArray.Skip(3).Take(2).ToArray();
            string Retorno = Encoding.ASCII.GetString(CMD);

            return Retorno;
        }

        public int GetLargo() 
        {
            byte[] Largo = (byte[])ByteArray.Skip(5).Take(5).ToArray();
            int Retorno = Int32.Parse(Largo.ToString());

            return Retorno;
        }

        public string GetName() 
        {
            var datosPrimerPaquete = Encoding.ASCII.GetString((byte[])ByteArray.Skip(10).Take(ByteArray.Length - 10).ToArray());
            var result = datosPrimerPaquete.Split('@');
            if (result.Length > 0)
                return result[0];

            return string.Empty;
        }
        public int GetCantidadPaquetes() 
        {
            var datosPrimerPaquete = Encoding.ASCII.GetString((byte[])ByteArray.Skip(10).Take(ByteArray.Length - 10).ToArray());
            var result = datosPrimerPaquete.Split('@');
            if (result.Length > 1)
                return Int32.Parse(result[1]);

            return 0;
        }
        public string getMD5() 
        {
            var datosPrimerPaquete = Encoding.ASCII.GetString((byte[])ByteArray.Skip(10).Take(ByteArray.Length - 10).ToArray());
            var result = datosPrimerPaquete.Split('@');
            if (result.Length > 2)
                return result[2];

            return string.Empty;
        }

        public string getNumeroPaquete()
        {
            var datosPrimerPaquete = Encoding.ASCII.GetString((byte[])ByteArray.Skip(10).Take(ByteArray.Length - 10).ToArray());
            var result = datosPrimerPaquete.Split('@');
            if (result.Length > 3)
                return result[3];

            return string.Empty;
        }
        public double getTamañoArchivo()
        {
            var datosPrimerPaquete = Encoding.ASCII.GetString((byte[])ByteArray.Skip(10).Take(ByteArray.Length - 10).ToArray());
            var result = datosPrimerPaquete.Split('@');
            if (result.Length > 4)
                return double.Parse(result[4]);

            return 0;
        }

        public byte[] GetDatos()
        {
            byte[] Datos = (byte[])ByteArray.Skip(10).Take(ByteArray.Length - 10).ToArray();

            return Datos;
        }
    }
}
